﻿// See https://aka.ms/new-console-template for more information
using Market;
using Market.AbstractProduct;

Console.WriteLine("Hello, World!");

// 做一个伤处收银软件，营业员根据客户所购买商品的单价和数量，向客户收费
// 有折扣怎么办？
// 有满减活动怎么办？
// 有积分换商品又应该怎么办？

// 尝试用简单工厂实现

Console.WriteLine("商品单价：");
double price = double.Parse(Console.ReadLine());    
Console.WriteLine("商品数量：");
int number = int.Parse(Console.ReadLine());
Console.WriteLine("请输入折扣：\n1、正常收费。\n2、满300 - 100。\n3、打八折");
string discounts = Console.ReadLine();
switch (discounts) 
{
    case "1":
        discounts = "正常收费";
        break;
    case "2":
        discounts = "满 300 减 100";
        break;
    case "3":
        discounts = "打八折";
        break;
}

#region 简单工厂模式
//CashSuper cash = CashFactory.CreateAccept(discounts);
//double result= cash.AcceptCash(price*number);
//Console.WriteLine($"收费：{result}");
#endregion


// 做完发现用简单工厂来做这个商品促销不太合适，如果我要多加几个促销模式就很麻烦，
// 而且代码不利于维护需要修改 switch,所以我们试试 策略模式
#region 策略模式+简单工厂模式
CashContext csuper = new CashContext(discounts);
double result = csuper.GetResult(price * number);
Console.WriteLine($"收费：{result}");
#endregion


// 用完发现策略模式+简单工厂模式发现如果要加功能的话还得修改Context里面的switch（不符合开放封闭原则）
